package categorias;

import utils.RepositorioException;

public class RepositorioCategoriasArray implements RepositorioCategorias{
	private Categoria[] categorias;

	private int posicao;

	public IteratorCategorias getIterator() {
		IteratorCategorias iteratorCategorias = new IteratorCategoriasArray(this.categorias);
		return iteratorCategorias;
	}

	public RepositorioCategoriasArray(int tamanho) {
		categorias = new Categoria[tamanho];
		posicao = 0;
	}

	public void inserir(Categoria categoria) {
		categorias[posicao] = categoria;
		posicao = posicao + 1;
	}

	public void atualizar(Categoria categoria) throws CategoriaNaoEncontradaException {
		int i = getPosicao(categoria.getDescricao());
		if (i == posicao) {
			throw new CategoriaNaoEncontradaException();
		} else {
			categorias[i] = categoria;
		}
	}

	public void remover(String texto) throws CategoriaNaoEncontradaException {
		int i = getPosicao(texto);
		if (i == posicao) {
			throw new CategoriaNaoEncontradaException();
		} else {
			categorias[i] = categorias[posicao - 1];
			categorias[posicao - 1] = null;
			posicao = posicao - 1;
		}
	}

	public Categoria procurar(String texto) throws CategoriaNaoEncontradaException {
		Categoria resposta;
		int i = getPosicao(texto);

		if (i == posicao) {
			throw new CategoriaNaoEncontradaException();
		} else {
			resposta = categorias[i];
		}
		return resposta;
	}

	public boolean existe(String texto) {
		boolean resposta;
		int i = getPosicao(texto);
		if (i == posicao) {
			resposta = false;
		} else {
			resposta = true;
		}
		return resposta;
	}

	private int getPosicao(String texto) {
		String n;
		boolean achou = false;
		int i = 0;
		while ((!achou) && (i < posicao)) {
			n = categorias[i].getDescricao();
			if (n.equals(texto)) {
				achou = true;
			} else {
				i = i + 1;
			}
		}
		return i;
	}

}